#ifndef NNE_RUNTIME_OPS_API_H_
#define NNE_RUNTIME_OPS_API_H_
#ifdef __cplusplus
extern "C" {
#endif

void conv_op(void *input, void *weight, void *bias, void *scale, void *output,
             int ifm_width, int ifm_height, int ifm_num, int ofm_num,
             int knl_h, int knl_w, int stride_h, int stride_w,
             int pad_l, int pad_r, int pad_t, int pad_b, int pad_w,
             int activation_type, int lrelu_lmbda, int out_shift);

void dw_conv_op(void *input, void *weight, void *bias, void *scale, void *output,
                int ifm_width, int ifm_height, int ifm_num,
                int knl_h, int knl_w, int stride_h, int stride_w,
                int pad_l, int pad_r, int pad_t, int pad_b, int pad_w,
                int activation_type, int lrelu_lmbda, int out_shift);

void activation_op(void *input, void *output, int scale,
                   int ifm_width, int ifm_height, int ifm_num,
                   int activation_type, int lrelu_lmbda, int out_shift);

void fc_op(void *input, void *weight, void *bias, void *scale, void *output,
           int fc_input_size, int fc_output_size, int activation_type,
           int lrelu_lmbda, int out_shift);

void avepool_op(void *input, void *output,
                int ifm_width, int ifm_height, int ifm_num,
                int knl_h, int knl_w, int stride_h, int stride_w,
                int pad_l, int pad_r, int pad_t, int pad_b, int pad_w,
                int re_mul_num, int out_shift);

void avepool_op_v2(void *input, void *output,
                   int ifm_width, int ifm_height, int ifm_num,
                   int knl_h, int knl_w, int stride_h, int stride_w,
                   int pad_l, int pad_r, int pad_t, int pad_b, int pad_w,
                   int scale_num, int scale_shift);

void maxpool_op(void *input, void *output,
                int ifm_width, int ifm_height, int ifm_num,
                int knl_h, int knl_w, int stride_h, int stride_w,
                int pad_l, int pad_r, int pad_t, int pad_b, int pad_w);

void maxpool_op_v2(void *input, void *output,
                   int ifm_width, int ifm_height, int ifm_num,
                   int knl_h, int knl_w, int stride_h, int stride_w,
                   int pad_l, int pad_r, int pad_t, int pad_b, int pad_w);

void ewadd_op(void *input_1, void *input_2, void *output,
              int ifm_size, int scale_num_1, int scale_num_2,
              int scale_shift_1, int scale_shift_2);

void ewmul_op(void *input_1, void *input_2, void *output,
              int ifm_size, int scale_num, int scale_shift);

void gap_op(void *input, void *output, int ifm_width,
            int ifm_height, int ifm_num, int scale_num,
            int scale_shift);

void upsampling_op(void *input, void *output, int ifm_height,
                   int ifm_width, int ifm_num, int h_factor,
                   int w_factor);
#ifdef __cplusplus
} // NNE_RUNTIME extern "C"
#endif


#endif
